
Wings, 展开单元测试的翅膀
Wings-企业级单元用例自动编码引擎,星云测试全自主研发的高端单元测试产品。它让计算机先对被测试程序进行全局分析和深度理解,再由计算机进行全自动的完成单元测试编码,以验证开发人员编写的源代码逻辑输入输出的对错。在单元测试编写环节,效率可提高80-90%。
1. 背景随着软件规模和软件质量的要求日益提升,以及敏捷迭代和极限编程等开发思想的逐渐普及,传统的倒金字塔形测试已经不再适用,测试的重点逐渐转向单元测试,即转变为更为稳定的正向测试金字塔结构。
图表 1 测试重点转向单元测试
单元测试会极大程度上增加开发者的工作量,据统计,在开发过程中,对单元进行充分测试会增加50%至80%的工作负荷。编写单元测试驱动的过程耗时耗力,时间成本和经济成本极高,而且开发人员主观不愿意花时间对于自己编写的代码进行测试。
同时,编写单元测试用例对于测试人员的编程能力要求较高,技术门槛的提升也间接提升了进行单元测试的成本。
况且,单元测试相关的设计和开展耗时过长,导致完整的单元测试无法在敏捷迭代中被有效开展的适配。
因此,越来越多的开发者和厂商,开始寻求一种稳定有效,成本适宜,并且能够适配敏捷开发的解决方案。
3. 解决问题在这样的背景下,为有效解决上述提到的种种问题,Wings,作为一款能够有效解决种种行业痛点的工具,应运而生。
3.1 什么是Wings
Wings,企业级单元用例自动编码引擎,星云测试全自主研发的高端单元测试产品。它让计算机先对被测试程序进行全局分析和深度理解,再由计算机进行全自动的完成单元测试编码,以验证开发人员编写的源代码逻辑输入输出的对错。在单元测试编写环节,效率可提高80-90%。
Wings可以将任意复杂参数结构逐步分解为基本数据类型,并全自动生成测试驱动程序和参数捕获程序。Wings也支持生成多层次的可视化的数据表格来对变量进行赋值,使用者可以无需关注驱动程序本身。Wings对于复杂类型也具有有强大的处理能力。下文,将对Wings的工作流程,和独有的解决问题的能力,以及对应的应用场景进行概述性的介绍和分析。
3.2 Wings的工作流程
Wings利用代码静态分析技术,有效提取被测程序的主干信息,其主要步骤可以被概括为:
获取不同平台的编译数据库文件
依据编译数据库文件,对被测程序的源代码进行静态分析,将提取到的信息存储于Wings特有的PSD文件中。
读取PSD结构生成不同的文件,编译汇总成为测试程序,并运行得出测试结果。
读取分析PSD结构,获取起始测试参数。
图表 2 Wings的整个架构
3.3 Wings解决问题的能力,以及其部分应用场景
3.3.1 生成驱动
Wings解决的最直接的问题,是对于测试驱动的生成。可以将任意复杂参数结构逐步分解为基本数据类型,并全自动生成测试驱动程序和参数捕获程序。Wings支持面向过程C语言以及面向对象C++语言的驱动生成和参数捕获,能够支持高级语言特性和基本的内置类型,支持被测函数运行必要的全局变量的构建和赋值。
同时,通过对于代码的深入理解和逻辑梳理,Wings能够快速,准确,有效的构建测试驱动代码。Wings使用的算法,可以有效的降低对代码的静态分析时间,对比某些传统的静态分析工具所需要的数小时解析和构建时间,wing能够实现每分钟100万行代码的构建速率,对于拥有数千万行代码的程序,其分析和构建的总时间均在分钟级,对于拥有大量函数(单元)的应用程序,Wings可以大大提升其单元测试的效率。更是远远超过人工理解代码和构建代码的速度。
图表 3 Wings构建测试驱动代码(示例1)
图表 4 Wings构建测试驱动代码(示例2)
3.3.2 逻辑解析(算法生成用例+数据展示)
Wings能够通过不同的算法,按照不同的目的,生成测试用例。包括:1. 随机算法:用于进行随机测试,可以针对单元测试,接口测试等;2. 符号执行:这种生成用例的方式,可以针对一些数值计算的函数以及模块;3. 搜索算法:通过变异方式结合覆盖生成用例;4. 程序分析:对程序进行深度的解析。
图表 5 Wings测试用例生成智能算法
Wings的另一项核心能力,是其对于代码逻辑的解析,具体体现在支持生成单独的值文件(数据表格)。并且通过该数据表格多层次的可视化结构,来对变量进行赋值,而无需关注驱动程序本身。数据表格可以表达任意深度和多层次的数据关系,用户只需要对表格数据进行编辑,结合自动生成的驱动程序,会自动完成表格数据的读取和参数赋值的构造过程。
数据表格直观的特性,使得用户可以在脱离开发环境的基础上,即使不是专业的开发人员,也能对被测对象进行赋值和测试,同时,Wings的数据表格支持多组用例的生成,结合算法,可以实现包含边界值(临界值)在内的多组数据生成,实现更高的覆盖率。
图表 6 Wings数据表格实例(1)
数据表格同样支持用户对其进行自定义编辑,尤其是涉及某些较为复杂的结构,用户可以采用比较灵活的赋值方式,考虑到实际应用中的一些因素,例如针对链表类型,默认赋值两层结构,在实际测试过程中,用户可依据需要自动添加节点。
图表 7Wings数据表格实例(2)
而在针对void*与函数指针的类型,Wings首先会利用静态分析技术,获取函数参数为void *与函数指针时的具体赋值类型。分析该函数变量的赋值类型,并将赋值类型标记于数据表格界面,并在后续分析中,实现对该赋值类型的自动调用。
同时,针对一些利用分析技术无法确定的类型,Wings会将所有有关的函数展示在界面上,由用户自己选择需要的类型,驱动会处理相对应的类型。如下图所示:
图表 8 Wings对于void*的解析和赋值
Wings对于特殊赋值类型的处理能力不止于此,还包括对于:结构体、类为系统变量;STL标准模版库;C++自定义模版类等特殊情况的处理。详情可以参考星云测试官方网站所发布的技术白皮书(http://www.teststars.cc)。
3.3.3 参数捕获
Wings还支持用户进行已完成测试的参数捕获,获得前序测试参数的意义在于,得到了已知结果的测试数据,并以此为依据和开端,可以显著降低初始化工作量,同时如果代码在迭代过程中发生变化, 可以通过对比前序测试数据,对于变化的源码进行有针对性的调整以评估迭代的影响。
参数捕获是通过在用户源码中插装Wings生成的参数捕获代码进行获取函数的参数数据,获取到的参数,全局变量和返回值,可以直接存放入PSD中,用于后续驱动代码的读取。参数捕获的过程示意图如下:
图表 9 参数捕获过程示意图
3.3.4代码变更(回归测试)
Wings能够在迭代的过程中,对增量和变更的代码进行针对性的驱动生成和整合,并能将相关的信息反馈给用户。因为在测试过程中,对于变更代码的回归测试往往是用户最为关注的部分。Wings结合星云测试精准测试平台强大的数据分析和智能回归测试用例选取能力,为单元测试的智能回归测试提供了完备的解决方案。通过智能分析算法,有效的甄别函数的变更部分,并针对其生成单元测试驱动,结合精准测试平台,进行智能回归测试。
3.3.5随机测试
Wings支持通过随机测试数据的批量生成,进行随机测试,而且可以做到不仅仅是局限于单元,也可以扩展到模块和中间件。
随机测试的意义在于,能够对被测对象进行鲁棒测试。对于关键系统来说,需要在一定错误数据的扰动下,仍然能够不崩溃,并且保证正常的运行状态,鲁棒测试可以通过在较大范围内模拟随机的异常情况,检验被测对象在异常输入和苛刻环境条件下能否保持正常的工作运行状态。Wings对于随机测试的支持,表明了Wings在复杂系统和核心系统的适应性。
4. Wings的横向支持能力Wings作为一款成熟的商用产品,可以实现对于不同开发环境,例如Qt,Visual Stuido,Workbench的支持,同时对于不同版本的C++(例如C++11,C++14,C++17,C++20等)也有完备的支持,保证其在不同环境下的高可用能力。Wings能够提供高效的可视化图形界面,几乎无需编程即可操作,同时可以提供综合的测试结果分析和管理报表。
在实现强大功能的前提下,得益于强大的优化,Wings的配置要求在同类产品中也很低,基础配置4核CPU和8g内存即可,也进一步体现了Wings对于成本(硬件成本)的优化和管控能力。
5. 结语Wings,作为一款革命性的测试产品,有效的解决了传统单元测试编写过程繁杂冗长的问题,提升了单元测试的效率,为单元测试插上了飞翔的翅膀。Wings的多种能力和应用场景,是对于工业生产应用能力的坚实支撑,也让其拥有了成为数字化转型核心组件的能力。将单元测试从敏捷开发和极限编程过程中的“绊脚石”,转化成为企业在软件开发过程中的源动力。
喜报|星云测试软件入选工信部2024年信息技术应用创新重点推荐解决方案
以创新技术助力航空软件高质量发展——星云测试参加2024年飞机航空电子国际论坛
星云测试入选2023年江苏省专精特新中小企业名单
2023金融业软件测试成果交流会 星云精准测试助力金融业软件测试数字化转型发展和进步
精准测试技术十年发展漫谈(下)
精准测试技术十年发展漫谈(上)
星云测试受邀出席 第二届工控中国大会
星云测试受邀出席 2022中国工业软件大会
星云测试携手飞腾等合作伙伴会于 2022中国金融产业峰会
星云精准测试平台通过了中国电子技术标准化研究院的软件测试工具能力评价
Wings, 展开单元测试的翅膀
测试数字化转型之精准测试与用例引擎的双轮驱动
“软件赋能汽车”下的新一代智能高可靠性精准测试技术
星云精准测试-为金融系统软件保驾护航
2020年中国银行业软件测试成果交流会”在北京召开
星云测试应邀参加第十一届中国国际软件质量工程(iSQE)峰会
【星云测试Wings-企业级单元用例自动编码引擎】 TiD 2020质量竞争力大会专题演讲
【星云精准测试-新一代软件测试技术流的前瞻与落地】TiD 2020质量竞争力大会专题演讲
Wings-面向企业级的单元测试用例自动编码引擎
Wings-企业级单元测试自动编码引擎白皮书最新发布
精准测试白皮书-2020版最新发布
精准测试在商业银行的研究与实践
星云精准测试有力提升金融复杂系统的测试能效
【星云简讯】“星云测试”喜获高新技术企业证书!
疫情之下,精准测试的智能可信模式正在成为中流砥柱
星云精准测试平台远程指导使用流程
星云测试在“软件工程工具标准工作组”承担相关任务
打造银行软件测试成果交流与共享平台——2019年中国银行业软件测试成果交流会综述
星云精准测试对安卓底层驱动代码的测试案例分析
软件世界 · 质量护航 —— 星云测试应邀参加2019年第十届中国国际软件质量工程(iSQE)峰会
第十届中国国际软件质量工程(iSQE)峰会圆满召开
精准测试白皮书V3.0-2019最新版
精准测试,浩瀚代码星空的守护者
“第一届浦发银行国际金融科技创新大赛在沪举行”星云测试勇夺第一名,荣膺白金奖
Devops微服务架构下具有代码级穿透能力的精准测试
星云精准测试之用例魔方
开发者测试(3)-采用精准测试工具对springcloud微服务应用进行穿透测试
开发者测试(2)-采用精准测试工具对J2EE Guns开发框架进行测试
开发者测试-采用精准测试工具对Spring Boot应用进行测试
精准测试的软件产品质量效率变化分析
Wings发布-让单元测试智能全自动生成
星云简讯:向八一建军节致敬
精准测试在复杂金融系统中的应用
星云精准测试在微服务架构中的应用简述
星云测试简介
2017全国大学生软件测试大赛“星云测试杯”华东区决赛 暨软件测试高峰论坛顺利举行
精准测试白皮书
探究软件测试之明珠—精准测试
星云测试成为省级研发中心牵头企业,专项负责工业软件质量精准诊断与分析平台研发
曾玉波:“精准测试”有望成未来10年主流技术
星云测试发布针对开放式Linux操作系统的嵌入式精准测试平台Shell
精准化测试专业平台Paw:专为苹果APP软件测试“填坑”
You can be the ONE--星云测试平台旗下产品由来
Paw--苹果应用可视化精准测试技术浅析
精准测试在智能机器人上的应用
星云礼包大放送
星云测试——开启软件云测试2.0崭新时代
星云测试-掀起企业应用精准测试的浪潮
兆联天下
15问答为专业测试人员揭开“精准测试”的面纱
新品 | 如何开发出一款高质量APP 【内有福利】
星云在线测试-触手可及的移动应用数字化精准测试
星云测试--让软件像普通商品一样放心交易
沧海一声笑,移动应用的CRASH原因我找到! --记最新款数字化测试“星云测试“的使用攻略
软件测试2.0——ThreadingTest数字化企业测试私有云探秘